home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Ahoy 1987 July
/
Ahoy_Magazine_87-07_1987_Double_L_Side_A.d64
/
LED Driver
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
2KB
|
69 lines
0 rem << rr43-1 >>
1 rem===================================
2 print"[147] led driver"
3 rem rupert report #43
4 rem use cassette port motor output
5 rem to light led
6 rem===================================
10 rem ====== initialization ==========
20 def fns(b)=peek(m) or 2^b :rem set bit b of location m
30 def fnc(b)=peek(m) and not 2^b :rem clear bit b of location m
40 m=0 : poke m,fns(4) :rem set ddr for bit 4 to be output
50 m=1 : poke m,fnc(4) :rem clear bit 4 of $1 so $192 is not cleared by irq
60 poke 192,1 :rem set $192 so irq does not turn motor on
70 pk=peek(1) : l1=pk and not 32 : l0=pk or 32 :rem on and off poke values
80 df=.50 :rem duty factor = 50%
90 k=2.5 : p=10^k : w1=df*p : w0=p-w1 :rem initial period and pulse widths
95 print "[147]" : gosub 2000 :rem graph
100 rem ====== main loop ===============
110 if df=0 then 130
120 poke 1,l1 : for n=1 to w1: next
130 get a$ : if a$<>"" then gosub 1000
140 if df=1 then 120
150 poke 1,l0 : for n=1 to w0 : next
160 get a$ : if a$<>"" then gosub 1000
170 goto 110
1000 rem ====== keyboard input =========
1010 rem + increases frequency
1020 rem - decreases frequency
1030 rem 1-9 = duty factor (10 to 90%)
1040 rem 0 = toggle duty factor (0/100%)
1050 rem
1060 if val(a$)>0 then df=0.1*val(a$) : rem 1 to 9 selected
1070 if a$="0" then df=-1*(df=0) : rem toggle 0 or 1
1080 if a$="-" then k=k+.5 :if k>3.5 then k=3.5 : rem increase period
1090 if a$="+" then k=k-.5 :if k<.5 then k=.5 :rem decrease period/increase freq
1100 p=10^k :rem get period
1110 w1=df*p : w0=p-w1 :rem pulse widths
1120 get a$ : if a$<>"" then 1060 : rem any more keys?
1130 gosub 2000 :rem display bar graph
1140 return
2000 rem ======= bargraphs =============
2010 print""; : for n=1 to 33 : print"[190]"; : next : print
2020 print"duty factor: "; : gosub 2100
2025 if df=0 then print"0"; : goto 2040
2030 for n=1 to df*10+.1 : print "[184][184]"; : next
2040 print : print"frequency : "; : gosub 2100
2050 for n=1 to 10-3*(k-.5)
2060 print"[185][185]"; : next
2070 return
2100 for n=1 to 20 : print" "; : next
2110 for n=1 to 20 : print"[157]"; : next
2120 return
2990 rem ====== duty factor demo =======
2991 rem > add line 99 goto 3000
2992 rem > rapidly move the led
2993 rem back and forth.
2994 rem > look at the relative widths
2995 rem of light and dark streaks
2996 rem as the duty factor changes.
2997 rem ===============================
3000 p0=9 : p1=1 : gosub 3050
3010 p0=5 : p1=5 : gosub 3050
3020 p0=1 : p1=9 : gosub 3050
3030 goto 3000
3050 for ct=1 to 50
3060 poke 1,l0 : for n=1 to p0 : next
3070 poke 1,l1 : for n=1 to p1 : next
3080 next : return